{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "d17591f2",
   "metadata": {},
   "source": [
    "# 第2章 数据分析相关库"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4e34c62a",
   "metadata": {},
   "source": [
    "# 2.1 数组运算 NumPy"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "60ce1256",
   "metadata": {},
   "source": [
    "## 2.1.1 NumPy 概述"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3ec023f9",
   "metadata": {},
   "source": [
    "## 2.1.2 数组的创建"
   ]
  },
  {
   "cell_type": "code",
   "id": "6fc26308",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-08-17T08:28:14.295206Z",
     "start_time": "2025-08-17T08:28:14.141648Z"
    }
   },
   "source": [
    "import numpy as np\n",
    "# 使用列表创建一维数组\n",
    "prices = np.array([100, 200, 300, 400, 500]) # 示例数据：股票价格\n",
    "print('一维数组： ', prices)\n",
    "# 使用元组创建二维数组\n",
    "volumes = np.array([(1000, 2000, 3000), (4000, 5000, 6000)]) # 示例数据：股票成交量\n",
    "print('二维数组： \\n', volumes)"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "一维数组：  [100 200 300 400 500]\n",
      "二维数组： \n",
      " [[1000 2000 3000]\n",
      " [4000 5000 6000]]\n"
     ]
    }
   ],
   "execution_count": 2
  },
  {
   "cell_type": "code",
   "id": "df2979d4",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-08-17T08:28:17.517414Z",
     "start_time": "2025-08-17T08:28:17.480993Z"
    }
   },
   "source": [
    "# 创建全零数组\n",
    "zeros_array = np.zeros((3, 3)) # 创建 3×3 的全零数组\n",
    "print('全零数组： \\n', zeros_array)\n",
    "# 创建全一数组\n",
    "ones_array = np.ones((2, 2)) # 创建 2×2 的全一数组\n",
    "print('全一数组： \\n', ones_array)\n",
    "# 创建等差数组\n",
    "arange_array = np.arange(0, 10, 2) # 生成 0 到 10 的等差数组，步长为 2\n",
    "print('等差数组： ', arange_array)\n",
    "# 创建线性等间距数组\n",
    "linspace_array = np.linspace(0, 1, 5) # 生成 0 到 1 的 5 个等间距数\n",
    "print('线性等间距数组： ', linspace_array)\n",
    "# 创建随机数组\n",
    "random_array = np.random.rand(3, 3) # 创建 3×3 的随机数组，元素在[0, 1)内\n",
    "print('随机数组： \\n', random_array)"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "全零数组： \n",
      " [[0. 0. 0.]\n",
      " [0. 0. 0.]\n",
      " [0. 0. 0.]]\n",
      "全一数组： \n",
      " [[1. 1.]\n",
      " [1. 1.]]\n",
      "等差数组：  [0 2 4 6 8]\n",
      "线性等间距数组：  [0.   0.25 0.5  0.75 1.  ]\n",
      "随机数组： \n",
      " [[0.23578462 0.34303874 0.36515102]\n",
      " [0.91018372 0.83981582 0.74529111]\n",
      " [0.96660564 0.17303583 0.50584514]]\n"
     ]
    }
   ],
   "execution_count": 3
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-08-28T02:00:20.989107Z",
     "start_time": "2025-08-28T02:00:18.378490Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import pandas as pd # 读取文件时需要先导入 pandas 库，将在 2.2 节详细介绍\n",
    "data_frame = pd.read_csv('stock_data.csv') # 示例文件为 stock_data.csv 文件，需与当前.ipynb 文件存储在同一文件夹内才可成功读取数据\n",
    "data_array = data_frame.values # 将 DataFrame 转换为 NumPy 数组\n",
    "print(\"从 CSV 文件创建的数组： \\n\", data_array)"
   ],
   "id": "7357af98215b7198",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "从 CSV 文件创建的数组： \n",
      " [[0 '交通银行' 601328 '2024-01-02' 5.39 5.41 5.45 5.37 1252778 725441819.0\n",
      "  1.49 0.74 0.04 0.32]\n",
      " [1 '交通银行' 601328 '2024-01-03' 5.41 5.48 5.49 5.4 1564273 912662451.0\n",
      "  1.66 1.29 0.07 0.4]\n",
      " [2 '交通银行' 601328 '2024-01-04' 5.47 5.53 5.53 5.47 1263685 741997555.0\n",
      "  1.09 0.91 0.05 0.32]\n",
      " [3 '交通银行' 601328 '2024-01-05' 5.52 5.54 5.61 5.51 1362116 808284867.0\n",
      "  1.81 0.18 0.01 0.35]\n",
      " [4 '交通银行' 601328 '2024-01-08' 5.53 5.52 5.58 5.48 1078442 635327397.0\n",
      "  1.81 -0.36 -0.02 0.27]\n",
      " [5 '交通银行' 601328 '2024-01-09' 5.5 5.51 5.53 5.44 984831 576699973.0 1.63\n",
      "  -0.18 -0.01 0.25]\n",
      " [6 '交通银行' 601328 '2024-01-10' 5.5 5.47 5.56 5.47 790095 463610158.0 1.63\n",
      "  -0.73 -0.04 0.2]\n",
      " [7 '交通银行' 601328 '2024-01-11' 5.47 5.38 5.47 5.38 1429723 828404503.0\n",
      "  1.65 -1.65 -0.09 0.36]\n",
      " [8 '交通银行' 601328 '2024-01-12' 5.38 5.44 5.46 5.38 1051751 610058255.0\n",
      "  1.49 1.12 0.06 0.27]\n",
      " [9 '交通银行' 601328 '2024-01-15' 5.45 5.46 5.47 5.41 911631 530401928.0 1.1\n",
      "  0.37 0.02 0.23]\n",
      " [10 '交通银行' 601328 '2024-01-16' 5.44 5.48 5.5 5.43 1202292 702211617.0\n",
      "  1.28 0.37 0.02 0.31]\n",
      " [11 '交通银行' 601328 '2024-01-17' 5.48 5.43 5.52 5.43 1500743 876332956.0\n",
      "  1.64 -0.91 -0.05 0.38]\n",
      " [12 '交通银行' 601328 '2024-01-18' 5.42 5.42 5.45 5.25 2724694 1556634116.0\n",
      "  3.68 -0.18 -0.01 0.69]\n",
      " [13 '交通银行' 601328 '2024-01-19' 5.39 5.4 5.42 5.31 1476814 848467508.0\n",
      "  2.03 -0.37 -0.02 0.38]\n",
      " [14 '交通银行' 601328 '2024-01-22' 5.4 5.4 5.45 5.36 2199734 1273837167.0\n",
      "  1.67 0.0 0.0 0.56]\n",
      " [15 '交通银行' 601328 '2024-01-23' 5.39 5.38 5.41 5.35 1174640 674754623.0\n",
      "  1.11 -0.37 -0.02 0.3]\n",
      " [16 '交通银行' 601328 '2024-01-24' 5.39 5.47 5.49 5.38 1832576 1064419708.0\n",
      "  2.04 1.67 0.09 0.47]\n",
      " [17 '交通银行' 601328 '2024-01-25' 5.5 5.53 5.55 5.47 1792120 1054502354.0\n",
      "  1.46 1.1 0.06 0.46]\n",
      " [18 '交通银行' 601328 '2024-01-26' 5.52 5.6 5.61 5.5 2093862 1242152044.0\n",
      "  1.99 1.27 0.07 0.53]\n",
      " [19 '交通银行' 601328 '2024-01-29' 5.62 5.67 5.72 5.61 1888490 1139529519.0\n",
      "  1.96 1.25 0.07 0.48]\n",
      " [20 '交通银行' 601328 '2024-01-30' 5.66 5.62 5.7 5.58 1335791 803415134.0\n",
      "  2.12 -0.88 -0.05 0.34]\n",
      " [21 '交通银行' 601328 '2024-01-31' 5.61 5.63 5.66 5.57 1446518 866234311.0\n",
      "  1.6 0.18 0.01 0.37]]\n"
     ]
    }
   ],
   "execution_count": 1
  },
  {
   "cell_type": "markdown",
   "id": "222a18b5",
   "metadata": {},
   "source": [
    "## 2.1.3 数组的常用属性"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "60c76d2f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "数组形状：  (3, 4)\n",
      "数组维度：  2\n",
      "数组元素总数：  12\n",
      "数组元素的数据类型：  int64\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "# 创建一个 3×4 的数组，表示某股票 3 天 4 个时段的价格\n",
    "stock_prices = np.array([[100, 101, 102, 103], [104, 105, 106, 107], [108, 109, 110, 111]])\n",
    "# 查看数组的形状\n",
    "print('数组形状： ', stock_prices.shape) # 输出： (3, 4)\n",
    "# 查看数组的维度\n",
    "print('数组维度： ', stock_prices.ndim) # 输出： 2\n",
    "# 查看数组中元素的总数\n",
    "print('数组元素总数： ', stock_prices.size) # 输出： 12\n",
    "# 查看数组中元素的数据类型\n",
    "print('数组元素的数据类型： ', stock_prices.dtype) # 输出： int64"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "611ff322",
   "metadata": {},
   "source": [
    "## 2.1.4 数组的形状改变"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "bfef6d14",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始数组：  [100 101 102 103 104 105 106 107 108 109 110 111]\n",
      "reshape()后的数组： \n",
      " [[100 101 102 103]\n",
      " [104 105 106 107]\n",
      " [108 109 110 111]]\n",
      "flatten()后的数组：  [100 101 102 103 104 105 106 107 108 109 110 111]\n",
      "squeeze()后的数组：  [100 200 300]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "# 创建一个包含 12 个股票价格的数组\n",
    "prices = np.array([100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111])\n",
    "print('原始数组： ', prices)\n",
    "# reshape()操作\n",
    "reshaped = prices.reshape((3, 4))\n",
    "print('reshape()后的数组： \\n', reshaped)\n",
    "# flatten()操作\n",
    "flattened = reshaped.flatten()\n",
    "print('flatten()后的数组： ', flattened)\n",
    "# squeeze()操作\n",
    "array_with_one_dim = np.array([[[100, 200, 300]]])\n",
    "squeezed = np.squeeze(array_with_one_dim)\n",
    "print('squeeze()后的数组： ', squeezed)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5330106e",
   "metadata": {},
   "source": [
    "## 2.1.5 数组的索引与切片"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e22e5268",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始数组：  [100 200 300 400 500 600]\n",
      "第一个元素：  100\n",
      "最后一个元素：  600\n",
      "第三个元素：  300\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "# 创建一个一维数组表示股票价格\n",
    "prices = np.array([100, 200, 300, 400, 500, 600])\n",
    "print('原始数组： ', prices)\n",
    "# 访问数组中的第一个元素\n",
    "print('第一个元素： ', prices[0])\n",
    "# 访问数组中的最后一个元素\n",
    "print('最后一个元素： ', prices[-1])\n",
    "# 访问数组中的第三个元素\n",
    "print('第三个元素： ', prices[2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "52f3210a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "价格大于 300 的股票：  [400 500 600]\n"
     ]
    }
   ],
   "source": [
    "# 创建一个一维数组表示股票价格\n",
    "prices = np.array([100, 200, 300, 400, 500, 600])\n",
    "# 筛选价格大于 300 的股票\n",
    "high_prices = prices[prices > 300]\n",
    "print('价格大于 300 的股票： ', high_prices)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "025c7515",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "选中的股票价格：  [100 300 500]\n"
     ]
    }
   ],
   "source": [
    "# 创建一个一维数组表示股票价格\n",
    "prices = np.array([100, 200, 300, 400, 500, 600])\n",
    "# 使用花式索引访问第一个、第三个和第五个元素\n",
    "selected_prices = prices[[0, 2, 4]]\n",
    "print('选中的股票价格： ', selected_prices)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "5d00d35e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第 2 个到第 4 个元素：  [200 300 400]\n",
      "前 3 个元素：  [100 200 300]\n",
      "从第 4 个元素到末尾的所有元素：  [400 500 600]\n",
      "以步长为 2 获取的元素：  [100 300 500]\n"
     ]
    }
   ],
   "source": [
    "# 创建一个一维数组表示股票价格\n",
    "prices = np.array([100, 200, 300, 400, 500, 600])\n",
    "# 获取第 2 个到第 4 个元素（索引从 1 到 3）\n",
    "subset = prices[1:4]\n",
    "print('第 2 个到第 4 个元素： ', subset)\n",
    "# 获取前 3 个元素\n",
    "subset = prices[:3]\n",
    "print('前 3 个元素： ', subset)\n",
    "# 获取从第 4 个元素到末尾的所有元素\n",
    "subset = prices[3:]\n",
    "print('从第 4 个元素到末尾的所有元素： ', subset)\n",
    "# 以步长为 2 获取元素\n",
    "subset = prices[::2]\n",
    "print('以步长为 2 获取的元素： ', subset)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "58e5ca20",
   "metadata": {},
   "source": [
    "## 2.1.6 数组的运算"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "27e11ff8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "数组加法结果：  [110 220 330 440]\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "# 创建两个一维数组表示股票价格\n",
    "prices1 = np.array([100, 200, 300, 400])\n",
    "prices2 = np.array([10, 20, 30, 40])\n",
    "# 数组加法\n",
    "add_result = prices1 + prices2\n",
    "print('数组加法结果： ', add_result)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "58b1ee2d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "广播机制结果：  [110 210 310 410]\n"
     ]
    }
   ],
   "source": [
    "# 创建一个一维数组和一个标量\n",
    "prices = np.array([100,200,300,400])\n",
    "scalar = 10\n",
    "# 通过广播机制进行数组与标量的加法运算\n",
    "broadcast_result = prices + scalar\n",
    "print('广播机制结果： ', broadcast_result)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "83b5078b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "均值：  300.0\n",
      "标准差：  141.4213562373095\n",
      "最大值：  500\n",
      "最小值：  100\n"
     ]
    }
   ],
   "source": [
    "# 创建一个一维数组表示股票价格\n",
    "prices = np.array([100,200,300,400,500])\n",
    "# 计算均值\n",
    "mean_price = np.mean(prices)\n",
    "print('均值： ', mean_price)\n",
    "# 计算标准差\n",
    "std_price = np.std(prices)\n",
    "print('标准差： ', std_price)\n",
    "# 计算最大值\n",
    "max_price = np.max(prices)\n",
    "print('最大值： ', max_price)\n",
    "# 计算最小值\n",
    "min_price = np.min(prices)\n",
    "print('最小值： ', min_price)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "e8433c9e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "求和：  2100\n",
      "按列求和：  [500 700 900]\n",
      "按行求和：  [ 600 1500]\n"
     ]
    }
   ],
   "source": [
    "# 创建一个二维数组表示多只股票的价格\n",
    "prices = np.array([[100,200,300], [400,500,600]])\n",
    "# 求和\n",
    "sum_prices = np.sum(prices)\n",
    "print('求和： ', sum_prices)\n",
    "# 按列求和\n",
    "sum_prices_col = np.sum(prices, axis=0)\n",
    "print('按列求和： ', sum_prices_col)\n",
    "# 按行求和\n",
    "sum_prices_row = np.sum(prices, axis=1)\n",
    "print('按行求和： ', sum_prices_row)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "8c1ea9c0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "矩阵乘法结果： \n",
      " [[19 22]\n",
      " [43 50]]\n",
      "矩阵求逆结果： \n",
      " [[-2.   1. ]\n",
      " [ 1.5 -0.5]]\n",
      "特征值：  [-0.37228132  5.37228132]\n",
      "特征向量： \n",
      " [[-0.82456484 -0.41597356]\n",
      " [ 0.56576746 -0.90937671]]\n"
     ]
    }
   ],
   "source": [
    "# 创建两个二维数组表示矩阵\n",
    "matrix1 = np.array([[1,2], [3,4]])\n",
    "matrix2 = np.array([[5,6], [7,8]])\n",
    "# 矩阵乘法\n",
    "dot_product = np.dot(matrix1, matrix2)\n",
    "print('矩阵乘法结果： \\n', dot_product)\n",
    "# 矩阵求逆\n",
    "inverse_matrix = np.linalg.inv(matrix1)\n",
    "print('矩阵求逆结果： \\n', inverse_matrix)\n",
    "# 计算矩阵的特征值和特征向量\n",
    "eigenvalues, eigenvectors = np.linalg.eig(matrix1)\n",
    "print('特征值： ', eigenvalues)\n",
    "print('特征向量： \\n', eigenvectors)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a1be90e9",
   "metadata": {},
   "source": [
    "# 2.2 数据处理 pandas"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cf8f9177",
   "metadata": {},
   "source": [
    "## 2.2.1 pandas 概述"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a8fb5927",
   "metadata": {},
   "source": [
    "## 2.2.2 Series 的创建"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "ee4331be",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "使用列表创建的 Series： \n",
      " 0    100\n",
      "1    200\n",
      "2    300\n",
      "3    400\n",
      "4    500\n",
      "dtype: int64\n",
      "使用 NumPy 数组创建的 Series： \n",
      " 0    5\n",
      "1   -2\n",
      "2    3\n",
      "3   -1\n",
      "4    4\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "# 使用列表创建 Series\n",
    "stock_prices = pd.Series([100,200,300,400,500])\n",
    "print('使用列表创建的 Series： \\n', stock_prices)\n",
    "# 使用 NumPy 数组创建 Series\n",
    "price_changes = np.array([5, -2,3, -1,4])\n",
    "price_series = pd.Series(price_changes)\n",
    "print('使用 NumPy 数组创建的 Series： \\n', price_series)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "38932da3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "使用字典创建的 Series： \n",
      " AAPL     150\n",
      "MSFT     250\n",
      "GOOG    2750\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "# 使用字典创建 Series\n",
    "stock_dict = {'AAPL':150, 'MSFT':250, 'GOOG':2750}\n",
    "stock_series = pd.Series(stock_dict)\n",
    "print('使用字典创建的 Series： \\n', stock_series)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "450e1f1f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "指定索引创建的 Series： \n",
      " AAPL    100\n",
      "MSFT    200\n",
      "GOOG    300\n",
      "AMZN    400\n",
      "META    500\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "# 指定索引创建 Series\n",
    "stock_prices = pd.Series([100,200,300,400,500], index=['AAPL', 'MSFT', 'GOOG', 'AMZN', 'META'])\n",
    "print('指定索引创建的 Series： \\n', stock_prices)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "61bb5999",
   "metadata": {},
   "source": [
    "## 2.2.3 Series 的索引及切片"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "ac537f25",
   "metadata": {},
   "outputs": [],
   "source": [
    "import warnings #警告不影响代码运行，使用此语句可以过滤不必要的警告\n",
    "warnings.filterwarnings(\"ignore\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "078f4fe5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始 Series： \n",
      " AAPL    100\n",
      "MSFT    200\n",
      "GOOG    300\n",
      "AMZN    400\n",
      "META    500\n",
      "dtype: int64\n",
      "第一个元素：  100\n",
      "最后一个元素：  500\n",
      "使用.iloc 基于位置的索引：  300\n",
      "标签为'GOOG'的元素：  300\n",
      "使用.loc 基于标签的索引：  300\n",
      "价格大于 300 的股票： \n",
      " AMZN    400\n",
      "META    500\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "# 创建一个示例 Series\n",
    "stock_prices = pd.Series([100,200,300,400,500], index=['AAPL', 'MSFT', 'GOOG', 'AMZN',\n",
    "'META'])\n",
    "print('原始 Series： \\n', stock_prices)\n",
    "# 基于位置的索引：通过整数索引第一个元素\n",
    "print('第一个元素： ', stock_prices[0])\n",
    "# 基于位置的索引：通过整数索引最后一个元素\n",
    "print('最后一个元素： ', stock_prices[-1])\n",
    "# 基于位置的索引：使用.iloc 属性索引元素\n",
    "print('使用.iloc 基于位置的索引： ', stock_prices.iloc[2])\n",
    "# 基于标签的索引：通过标签名索引元素\n",
    "print(\"标签为'GOOG'的元素： \", stock_prices['GOOG'])\n",
    "# 基于标签的索引：使用.loc 属性索引元素\n",
    "print('使用.loc 基于标签的索引： ', stock_prices.loc['GOOG'])\n",
    "# 布尔索引：筛选价格大于 300 的股票\n",
    "high_prices = stock_prices[stock_prices > 300]\n",
    "print('价格大于 300 的股票： \\n', high_prices)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "9ae42b71",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "第二个到第四个元素： \n",
      " MSFT    200\n",
      "GOOG    300\n",
      "AMZN    400\n",
      "dtype: int64\n",
      "使用.iloc 基于位置的切片： \n",
      " MSFT    200\n",
      "GOOG    300\n",
      "AMZN    400\n",
      "dtype: int64\n",
      "标签从'MSFT'到'AMZN'的元素： \n",
      " MSFT    200\n",
      "GOOG    300\n",
      "AMZN    400\n",
      "dtype: int64\n",
      "使用.loc 基于标签的切片： \n",
      " MSFT    200\n",
      "GOOG    300\n",
      "AMZN    400\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "# 基于位置的切片：通过整数访问第二个到第四个元素（切片）\n",
    "print('第二个到第四个元素： \\n', stock_prices[1:4])\n",
    "# 基于位置的切片：使用.iloc 属性切片\n",
    "print('使用.iloc 基于位置的切片： \\n', stock_prices.iloc[1:4])\n",
    "# 基于标签的切片：通过标签名切片\n",
    "print(\"标签从'MSFT'到'AMZN'的元素： \\n\", stock_prices['MSFT':'AMZN'])\n",
    "# 基于标签的切片：使用.loc 属性切片\n",
    "print('使用.loc 基于标签的切片： \\n', stock_prices.loc['MSFT':'AMZN'])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0755c417",
   "metadata": {},
   "source": [
    "## 2.2.4 DataFrame 的创建"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "1866dfc9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "使用字典创建的 DataFrame： \n",
      "       Name  Age  Salary\n",
      "0    Alice   25   50000\n",
      "1      Bob   30   60000\n",
      "2  Charlie   35   70000\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "# 使用字典创建 DataFrame\n",
    "data = {\n",
    "    'Name': ['Alice', 'Bob', 'Charlie'],\n",
    "    'Age': [25, 30, 35],\n",
    "    'Salary': [50000,60000,70000]\n",
    "}\n",
    "df = pd.DataFrame(data)\n",
    "print('使用字典创建的 DataFrame： \\n', df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "cf104df1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "使用列表创建的 DataFrame： \n",
      "       Name  Age  Salary\n",
      "0    Alice   25   50000\n",
      "1      Bob   30   60000\n",
      "2  Charlie   35   70000\n"
     ]
    }
   ],
   "source": [
    "# 使用列表创建 DataFrame\n",
    "data = [\n",
    "    ['Alice', 25, 50000],\n",
    "    ['Bob', 30, 60000],\n",
    "    ['Charlie', 35, 70000]\n",
    "]\n",
    "df = pd.DataFrame(data, columns=['Name', 'Age', 'Salary'])\n",
    "print('使用列表创建的 DataFrame： \\n', df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "2a47ecc5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "使用 NumPy 数组创建的 DataFrame： \n",
      "       Name Age Salary\n",
      "0    Alice  25  50000\n",
      "1      Bob  30  60000\n",
      "2  Charlie  35  70000\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "# 使用 NumPy 数组创建 DataFrame\n",
    "data = np.array([\n",
    "    ['Alice', 25, 50000],\n",
    "    ['Bob', 30, 60000],\n",
    "    ['Charlie', 35, 70000]\n",
    "])\n",
    "df = pd.DataFrame(data, columns=['Name', 'Age', 'Salary'])\n",
    "print('使用 NumPy 数组创建的 DataFrame： \\n', df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "3d461f21",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "使用 Series 创建的 DataFrame： \n",
      "       Name  Age  Salary\n",
      "0    Alice   25   50000\n",
      "1      Bob   30   60000\n",
      "2  Charlie   35   70000\n"
     ]
    }
   ],
   "source": [
    "# 使用 Series 创建 DataFrame\n",
    "names = pd.Series(['Alice', 'Bob', 'Charlie'])\n",
    "ages = pd.Series([25,30,35])\n",
    "salaries = pd.Series([50000,60000,70000])\n",
    "df = pd.DataFrame({\n",
    "    'Name': names,\n",
    "    'Age': ages,\n",
    "    'Salary': salaries\n",
    "})\n",
    "print('使用 Series 创建的 DataFrame： \\n', df)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0874a13d",
   "metadata": {},
   "source": [
    "## 2.2.5 DataFrame 的写入与读取"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "00259364",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DataFrame 已写入 CSV 文件： employee_data.csv\n",
      "从 CSV 文件读取的 DataFrame： \n",
      "       Name  Age  Salary\n",
      "0    Alice   25   50000\n",
      "1      Bob   30   60000\n",
      "2  Charlie   35   70000\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "# 创建一个示例 DataFrame\n",
    "data = {\n",
    "    'Name': ['Alice', 'Bob', 'Charlie'],\n",
    "    'Age': [25, 30, 35],\n",
    "    'Salary': [50000,60000,70000]\n",
    "}\n",
    "df = pd.DataFrame(data)\n",
    "# 将 DataFrame 写入 CSV 文件\n",
    "df.to_csv('employee_data.csv', index=False)\n",
    "print('DataFrame 已写入 CSV 文件： employee_data.csv')\n",
    "# 从 CSV 文件中读取数据，并将其转换为 DataFrame\n",
    "df_csv = pd.read_csv('employee_data.csv')\n",
    "print('从 CSV 文件读取的 DataFrame： \\n', df_csv)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "941c9bd6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DataFrame 已写入 Excel 文件： employee_data.xlsx\n",
      "从 Excel 文件读取的 DataFrame： \n",
      "       Name  Age  Salary\n",
      "0    Alice   25   50000\n",
      "1      Bob   30   60000\n",
      "2  Charlie   35   70000\n"
     ]
    }
   ],
   "source": [
    "# 将 DataFrame 写入 Excel 文件\n",
    "df.to_excel('employee_data.xlsx', index=False)\n",
    "print('DataFrame 已写入 Excel 文件： employee_data.xlsx')\n",
    "# 从 Excel 文件中读取数据，并将其转换为 DataFrame\n",
    "df_excel = pd.read_excel('employee_data.xlsx')\n",
    "print('从 Excel 文件读取的 DataFrame： \\n', df_excel)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "24761d42",
   "metadata": {},
   "source": [
    "## 2.2.6 DataFrame 的索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "34c293b4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始 DataFrame： \n",
      "       Name  Age  Salary\n",
      "0    Alice   25   50000\n",
      "1      Bob   30   60000\n",
      "2  Charlie   35   70000\n",
      "\n",
      " 访问第一行数据： \n",
      " Name      Alice\n",
      "Age          25\n",
      "Salary    50000\n",
      "Name: 0, dtype: object\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "# 创建一个示例 DataFrame\n",
    "data = {\n",
    "    'Name': ['Alice', 'Bob', 'Charlie'],\n",
    "    'Age': [25, 30, 35],\n",
    "    'Salary': [50000, 60000, 70000]\n",
    "}\n",
    "df = pd.DataFrame(data)\n",
    "print('原始 DataFrame： \\n', df)\n",
    "# 访问第一行数据\n",
    "print('\\n 访问第一行数据： \\n', df.iloc[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "93683f63",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      " 访问'Age'列： \n",
      " 0    25\n",
      "1    30\n",
      "2    35\n",
      "Name: Age, dtype: int64\n",
      "\n",
      " 访问多列数据： \n",
      "       Name  Salary\n",
      "0    Alice   50000\n",
      "1      Bob   60000\n",
      "2  Charlie   70000\n"
     ]
    }
   ],
   "source": [
    "# 访问'Age'列\n",
    "print(\"\\n 访问'Age'列： \\n\", df['Age'])\n",
    "# 访问多列数据\n",
    "print('\\n 访问多列数据： \\n', df[['Name', 'Salary']])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "8f9f693b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "带有多级索引的 DataFrame： \n",
      "             Price\n",
      "Stock Year       \n",
      "AAPL  2018    150\n",
      "      2019    160\n",
      "MSFT  2018    200\n",
      "      2019    210\n",
      "\n",
      " 查询多级索引的数据（按 Stock）： \n",
      "       Price\n",
      "Year       \n",
      "2018    150\n",
      "2019    160\n",
      "\n",
      " 查询多级索引的数据（按 Stock 和 Year）： \n",
      " Price    150\n",
      "Name: (AAPL, 2018), dtype: int64\n"
     ]
    }
   ],
   "source": [
    "# 创建一个带有多级索引的 DataFrame\n",
    "arrays = [['AAPL', 'AAPL', 'MSFT', 'MSFT'], ['2018', '2019', '2018', '2019']]\n",
    "index = pd.MultiIndex.from_arrays(arrays, names=('Stock', 'Year'))\n",
    "data = {'Price': [150, 160, 200, 210]}\n",
    "df_multi = pd.DataFrame(data, index=index)\n",
    "print('带有多级索引的 DataFrame： \\n', df_multi)\n",
    "# 使用多级索引进行数据查询\n",
    "print('\\n 查询多级索引的数据（按 Stock）： \\n', df_multi.loc['AAPL'])\n",
    "print('\\n 查询多级索引的数据（按 Stock 和 Year）： \\n', df_multi.loc[('AAPL', '2018')])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4548f428",
   "metadata": {},
   "source": [
    "## 2.2.7 DataFrame 的增删改查"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "648154bf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      " 增加新行后的 DataFrame： \n",
      "       Name  Age  Salary   Department\n",
      "0    Alice   25   50000           HR\n",
      "1      Bob   30   60000  Engineering\n",
      "2  Charlie   35   70000      Finance\n",
      "3      Tom   29   43000    Marketing\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "# 创建一个示例 DataFrame\n",
    "data = {\n",
    "    'Name': ['Alice', 'Bob', 'Charlie'],\n",
    "    'Age': [25, 30, 35],\n",
    "    'Salary': [50000, 60000, 70000]\n",
    "}\n",
    "df = pd.DataFrame(data)\n",
    "# 增加新列：直接赋值\n",
    "df['Department'] = ['HR', 'Engineering', 'Finance']\n",
    "# 增加新行：使用索引\n",
    "df.loc[df.index.max() + 1] = ['Tom', 29, 43000,'Marketing']\n",
    "print('\\n 增加新行后的 DataFrame： \\n', df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "820c8d63",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      " 删除行后的 DataFrame： \n",
      "     Name  Age  Salary\n",
      "0  Alice   25   50000\n",
      "1    Bob   30   60000\n",
      "3    Tom   29   43000\n"
     ]
    }
   ],
   "source": [
    "# 删除列\n",
    "df = df.drop(columns=['Department']) #删除 Department 列\n",
    "# 删除行\n",
    "df = df.drop(index=2) #删除索引为 2 的行\n",
    "print('\\n 删除行后的 DataFrame： \\n', df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "c5dd9381",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      " 修改数据后的 DataFrame： \n",
      "     Name Age  Salary\n",
      "0  Alice  26   55000\n",
      "1    Bob  30   65000\n",
      "3    Tom  39   48000\n"
     ]
    }
   ],
   "source": [
    "# 修改单个元素\n",
    "df.at[0, 'Age'] = 26\n",
    "# 修改整列数据\n",
    "df['Salary'] = df['Salary'] + 5000\n",
    "# 修改符合条件的行数据\n",
    "df.loc[df['Name'] == 'Tom', 'Age'] = '39'\n",
    "print('\\n 修改数据后的 DataFrame： \\n', df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "eea89024",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      " 查找工资高于 60000 的数据： \n",
      "   Name Age  Salary\n",
      "1  Bob  30   65000\n",
      "\n",
      " 按标签查找数据： \n",
      " Name        Bob\n",
      "Age          30\n",
      "Salary    65000\n",
      "Name: 1, dtype: object\n",
      "\n",
      " 按位置查找数据： \n",
      " Name        Bob\n",
      "Age          30\n",
      "Salary    65000\n",
      "Name: 1, dtype: object\n"
     ]
    }
   ],
   "source": [
    "# 按条件查找数据\n",
    "high_salary = df[df['Salary'] > 60000]\n",
    "print('\\n 查找工资高于 60000 的数据： \\n', high_salary)\n",
    "# 按标签查找数据\n",
    "print('\\n 按标签查找数据： \\n', df.loc[1])\n",
    "# 按位置查找数据\n",
    "print('\\n 按位置查找数据： \\n', df.iloc[1])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "949cbd6f",
   "metadata": {},
   "source": [
    "## 2.2.8 DataFrame 的合并"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "07d2c87f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "沿行拼接后的 DataFrame： \n",
      "   Stock  Price\n",
      "0  AAPL    150\n",
      "1  MSFT    200\n",
      "2  GOOG   2750\n",
      "3  AMZN   3400\n",
      "4  META    300\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "# 创建示例 DataFrame 表示股票价格\n",
    "df1 = pd.DataFrame({\n",
    "    'Stock': ['AAPL', 'MSFT', 'GOOG'],\n",
    "    'Price': [150, 200, 2750]\n",
    "})\n",
    "df2 = pd.DataFrame({\n",
    "    'Stock': ['AMZN', 'META'],\n",
    "    'Price': [3400, 300]\n",
    "})\n",
    "# 沿行拼接\n",
    "result = pd.concat([df1, df2], axis=0, ignore_index=True)\n",
    "print('沿行拼接后的 DataFrame： \\n', result)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "fa9ec220",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "内连接后的 DataFrame： \n",
      "   Stock  Price  Volume\n",
      "0  AAPL    150    1000\n",
      "1  MSFT    200    2000\n",
      "2  GOOG   2750    1500\n",
      "外连接后的 DataFrame： \n",
      "   Stock  Price  Volume\n",
      "0  AAPL    150    1000\n",
      "1  GOOG   2750    1500\n",
      "2  MSFT    200    2000\n",
      "左连接后的 DataFrame： \n",
      "   Stock  Price  Volume\n",
      "0  AAPL    150    1000\n",
      "1  MSFT    200    2000\n",
      "2  GOOG   2750    1500\n",
      "右连接后的 DataFrame： \n",
      "   Stock  Price  Volume\n",
      "0  AAPL    150    1000\n",
      "1  MSFT    200    2000\n",
      "2  GOOG   2750    1500\n"
     ]
    }
   ],
   "source": [
    "# 创建示例 DataFrame\n",
    "left = pd.DataFrame({\n",
    "    'Stock': ['AAPL', 'MSFT', 'GOOG'],\n",
    "    'Price': [150, 200, 2750]\n",
    "})\n",
    "right = pd.DataFrame({\n",
    "    'Stock': ['AAPL', 'MSFT', 'GOOG'],\n",
    "    'Volume': [1000, 2000, 1500]\n",
    "})\n",
    "# 内连接\n",
    "result = pd.merge(left, right, on='Stock')\n",
    "print('内连接后的 DataFrame： \\n', result)\n",
    "# 外连接\n",
    "result = pd.merge(left, right, how='outer', on='Stock')\n",
    "print('外连接后的 DataFrame： \\n', result)\n",
    "# 左连接\n",
    "result = pd.merge(left, right, how='left', on='Stock')\n",
    "print('左连接后的 DataFrame： \\n', result)\n",
    "# 右连接\n",
    "result = pd.merge(left, right, how='right', on='Stock')\n",
    "print('右连接后的 DataFrame： \\n', result)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "0117eabe",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "使用 combine_first()合并后的 DataFrame： \n",
      "   Stock   Price  Volume\n",
      "0  AAPL   150.0  1000.0\n",
      "1  MSFT   200.0  2000.0\n",
      "2  GOOG  2750.0  1500.0\n"
     ]
    }
   ],
   "source": [
    "# 创建示例 DataFrame\n",
    "df1 = pd.DataFrame({\n",
    "    'Stock': ['AAPL', 'MSFT', 'GOOG'],\n",
    "    'Price': [150, 200, None],\n",
    "    'Volume': [1000, None, 1500]\n",
    "})\n",
    "df2 = pd.DataFrame({\n",
    "    'Stock': ['AAPL', 'MSFT', 'GOOG'],\n",
    "    'Price': [None, 200, 2750],\n",
    "    'Volume': [1000, 2000, None]\n",
    "})\n",
    "# 使用 combine_first()函数合并\n",
    "result = df1.combine_first(df2)\n",
    "print('使用 combine_first()合并后的 DataFrame： \\n', result)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c0660a16",
   "metadata": {},
   "source": [
    "# 2.3 数据绘图 Matplotlib"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b3baaebe",
   "metadata": {},
   "source": [
    "## 2.3.1 Matplotlib 绘图基础"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fab2fd14",
   "metadata": {},
   "source": [
    "## 2.3.2 Matplotlib 图形绘制"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "c0dc9734",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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VceOHXn99dfJzs5m8eLFjBw5ssHt1dXVzJw5E6gfNmIYRoPbnXvUBgwYQFlZGW+99RZt27alrKyMzz//HKDB/2+st99+mxEjRjQ44Lop1q1bR3Z29inPhwNo164dV111FYsXL3YdOzB58mTq6uoAmD9/Pn5+flitVh5//PFGPX58fDzvvvsuCxcu5Fe/+hWffPLJMX+3IiLinRTaRESkWV177bU8+OCDxx2KceDAAS644AL27t3Lt99+y8KFC7ntttuora095r5+fn6Eh4cTFBSExWIhPDyc4OBggAb/vzE+/PBDPvroIx588MHT/r6ef/55hgwZQnp6+inv+8QTT5CQkMCDDz5IXFwcs2fPJjs7m6ioKB566CGuueYarr76aoYMGcKYMWPYv38/S5cu5a677sJutze4VlZWFtu2bWPbtm107NiR6dOnY7VaefHFF12f37ZtG6Wlpaf9vYmIiHtTe6SIiLQ4u93OP/7xD/70pz/RtWtXli1bRkJCAt9++y3jxo3j7LPP5rXXXmPgwIFkZWVRUFBAdXU127ZtIzc3F7vdzrZt21x72375/wMCAo67j81ut/N///d/TJo0iYceeuiYoScnUlVVRXZ2NpmZmYSFhfHZZ58xc+ZM5s6d26ivHz9+PB07duRXv/oVkZGROBwOJk+ezGuvvUZAQAD/+c9/uOOOOygsLOSKK64gPT2ds846iy1btvDmm282uNYdd9xx3MfYsWMH77//foPP3XrrrY2qT0REPItCm4iItLjS0lLefvtt7rnnHp555hnXBMYRI0awbt06HnnkEaqqqli6dCmXXXaZ6+t69uzZqP/fvn171zEARyspKeGdd97h2Wef5Y9//GOD2ywWC2FhYcfsqYP6owP69u1LUFAQH374IUuWLOH//b//x8UXX9yo73fIkCGuw8GhftWwvLychx9+mN/+9rdERUUB9UcGLF68mClTpjBt2jQefvjhY661cOHCY4a1HM8vDxgXERHvYTF+uZlARETEi9hstgZnuTVWbW1tg/H+p3sdERGRM6XQJiIiIiIi4sY0iERERERERMSNKbSJiIiIiIi4MYU2ERERERERN6Yd1UdxOBzk5OQQERFx2oevioiIiIiI5zMMg7KyMpKSkvDzM3etS6HtKDk5OaSmpppdhoiIiIiIuImsrCxSUlJMrUGh7SgRERFA/RMT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9O7dm3feecd1+8aNG+nbt6/rz8HBwXTr1o1NmzY15luU46hvjazfrzimr6ZGyqklR4dwUa92gFbbREQ82ZKd9atsfVOiiQkLNLkaEWlUaAsICOCmm27i4Ycf5o033uDHH3/kwIEDvPTSS8ybN48///nPrvu2a9eON954w7UidzIFBQX069eP8ePHs3nzZpYvX87OnTuZOHHiMfetqqpixIgRPP300+Tk5PDKK6/w4IMP8sknnwBQVlZGWFhYg68JCwujvLz8hI9fU1NDaWlpgw/52f92FVBabSM+IoghHdQaKY3jHP//3zXZlFWrPVlExBMdvZ9NRMzX6FMS77jjjuN+/pxzzmHjxo0NbjcMg4iIU08Zio+PZ9GiRa4/p6WlMWXKFIYNG0ZZWVmDa9x4443ceOONrj9ffPHF3HLLLcycOZPrr7+eiIgIKioqGly/oqLipHU8//zzTWrl9DVfH2mNvFytkdIEwzu3oXN8GLsPVfD52gOuECciIp7B7jBYtrMAgFHd1Bop4g4avadt0KBBx/04//zzueSSS/jmm28IDg5m0KBBDB48+LirZb+0efNmJk2ahGEYrs9VV1cTEBBAUFBQg/u+9957fPrppw0+V11dTXh4OADp6els3LjRdVtNTQ07duygd+/eJ3z8SZMmUVJS4vrIyspq1N+FL6ix2fl+i7M1UlMjpfEsFosrqE1fsb/Bv28REXF/67OLKamqIzLYSr+UaLPLERGasNJ23333nfT2PXv24HA4Tnm/o8XExDBt2jSio6P53e9+R25uLo899hi33347gYEN+6dLSkr4/e9/T7du3ejbty9z585lxowZrr1zd9xxB08++STXXnstqampTJo0icTEREaNGnXCxw8KCjomHEq9ZTsLKKu20TYiiMHtY8wuRzzM1QOTmTJ3G7vyy1mxu5Dh2sQuIuIxFm+vb408t2u8zmcVcRONDm0Ay5cv54UXXjjubbm5ueTl5fHqq682+npJSUnMnTuXxx9/nL/+9a/ExMQwYcIEnn76aQDCw8P517/+xcSJE3nggQeoqKjg6quvpqCggG7dujFz5kzOOeccAO68805ycnIYNWoUpaWlDB06lDlz5mC1NulblCPmOFsj+yTip9ZIaaKI4ACuGpjMBz9mMn3FfoU2EREP4hxCMlKtkSJuw2I0oXfpwIEDLFu27IS3v/TS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tImIiIiIiLgxhTYRERERERE3ptAmIiIiIiLixjwutGVkZDB69GhiYmJISkrivvvuo6KiwnXb0KFDCQ0NpUOHDrz55puur7PZbDzxxBOkpaURFRXFkCFDmD9//nEf41//+tdJD9c+upYTPd7RXn75ZUaPHn3K6+Xn53P11VcTERFBXFwcDz74IHV1dcfc78cffzR186QvPwcPPPAAQUFBhIeHuz5O9JgtyZefg9mzZ9OvXz+ioqIYPHgw33333Smv2VK8+XlwKigooFOnTixatKjB5//+97/TtWtXIiMj6devH1999VWjr9mcfPU5uOeeexr8HAoPD8ff35+LL7640ddtLt78HJzsezuafi83rKU1nwP9Xj5+La35HDT297Kn/B015fGcWuU1vOFBDh06ZMTExBjTpk0z6urqjKysLGPw4MHGfffdZxw+fNho06aN8fLLLxu1tbXGsmXLjLCwMOOHH34wDMMwnnjiCaNfv37Gvn37DJvNZrz55ptGaGiosX///gaPsWHDBiM8PNw41V/NqR7PMAyjvLzcePTRRw3AGDVq1Cm/v/POO8/41a9+ZZSWlhrZ2dlGenq68cQTT7hut9vtxttvv21EREScsr6W4uvPwVlnnWW89dZbTfgba36+/BysXr3asFqtxjvvvGPU1dUZixcvNsLDw42FCxc27S+xGXj782AYhrFs2TKja9euBtDg73j27NlGdHS0kZGRYRiGYWRkZBjh4eHG1q1bG3Xd5uLLz8EvLVq0yIiIiDDWrFnTqOs2F29+Dk72vTnp93JDZjwH+r3cUGs/B439vexJf0eNfbyjtcZreI8KbStXrjSuvPLKBp97/fXXjT59+hhvvfWW0aVLlwa33XnnncbEiRMNwzCMBx980Pjss88a3B4TE2PMmjXL9efy8nIjPT3deOqpp075F3qqxzMMw+jcubMxceJE47777jvlP4pdu3YZgJGVleX63Pvvv28kJye7/nzbbbcZZ511lvH666+b9svBl5+Duro6Izg42Fi7du1Jr9PSfPk5ePzxx43zzjvvmMe77rrrTnrdluDNz4NhGMY777xjpKWlGZ999tkxgcFutxtFRUWu/z937lzD39+/Qf2twZefg6Pl5eUZCQkJxn/+859TXrO5efNzcLLvzUm/lxtq7edAv5eP1drPQWN/L3vS31FjHu9orfUa3qPa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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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hWWDqB4sX768/Pu/TwRVWyqVCrNmzYKvry/27t1bfujskSNHkJCQgAkTJtRonGPHjmHQoEGIiYnBzJkzAQBeXl5YtGgRHn74YYSEhOA///lPpccZDAYcO3YML774Il566SXs2LEDGo0G3333HdavX4+HH34Y3bt3x48//oj33nsPwcHBmDhxIkaPHo1WrVpVmUUIgSZNmmDdunXw8vKq0cTP33//HS+88EKF2y5evIidO3fimWeeqXC7g4MD4uLi0KZNm5uOl5qaiqysLLRs2RK///47nn322Woz3MjR0RHLli3DuHHj0KdPH6xZswbdu3ev1RhEto5HoxDVgwEDBpR//b17oVmzZhBCICwsrMbjTJ06FX/++Seefvpp/PHHH1iyZAmGDBmCdu3aVfpF+086nQ6zZ8/GPffcg06dOmHjxo0VdnU89NBDmD17Nt5//3088sgjyMzMrPD43377DUVFRejWrRs2b96MCxcu4MqVK9i3bx+GDh2Kd955B1u3bkVISAhefvllAGWH+B49erTKPCdPniy/jspnn32GBx98EL1798YzzzyDy5cv3/R5CCHg6elZ4cvV1RUKhaLS7S4uLlXOkfn7tg8++ADNmzfH+fPn8e677yIpKana1/Fvqamp5UfjeHp64ssvv0TTpk3xzjvvVDhS55+vI5FdEkRkNn/88Yf4+212+vRpcerUKeHs7Cx++uknIYQQOTk54uTJk+L1118XLi4uNRpz9erVIiYmRri4uAg/Pz/x/PPPi6ysrFs+ZsWKFSIsLEw4ODiIyZMnC6PReNNl16xZI3x8fISvr69YuHChEEIInU4nYmJixH333Vdh2VdeeUV4eHiIVatWld8WFxcnXF1dxYgRI4RKpRLXr18vvy89PV2sWLFC9OnTRygUCtG9e3dx7Nix8vvXrVsnmjRpIlQqlRg8eLD47rvvyp/bpUuXBIDb+urSpUuF3D/99JMAICIiIsSPP/4oXnzxRaFQKMT3339fISsAcfTo0UqvUaNGjWq1/h49etzy/w+RrWPZIDKj3bt3i0aNGgkhhBgwYIBQqVSiY8eOIjMzUwghxPHjxwUA4eTkJMaNG2e2HAkJCWLUqFHi4sWLNVo+LS1NTJgwQaxfv14IIcSJEydEaGioOHv2bIXlTCZThTLxt127donQ0FDx1FNPld927NgxoVKphIODgxg6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2rULgYGB0Gq15RNF/1ZYWAitVlvhtmXLlqF3796YMGECpk+fDgCIj4/H5MmTsXLlSqjV6krrmzVrVoVJmbGxsTVeX1ViY2MrjDdr1qybjgcAWq0WvXv3xtatW9G9e3doNBp07NgRr7zyClavXl39C0ZEVEcqf0IS2aATJ05g8ODBiImJwc8//wx3d3cAQGRkJDZt2lRp2datWwMo2+Xy6quv4ptvvsHq1asxZMiQ8uXWrFmDrKwsREVFASibHwEAnp6eWLBgASZPnozJkydXGPvs2bO3XN+tdOvWrdIWl3PnziErKwtJSUkIDg4uHy8kJAQeHh5Yv349kpOT8cILL5Q/pqSkBG5ubtWuj4iozsieoUpkbklJScLX11e8/vrrwmQyVbgvIyNDeHh4iM8//1wYjUaxdetW4erqKrZv3y6EEOKtt94SgYGBIiEhodr1bN++vdqjUapb341mzJhRo6NRunbtKp544glRVFQkLl68KFq0aCHefvttIYQQP//8s3BychJbtmwRJpNJ7Nu3T/j6+orvvvuu2nGJiOoKywbZvClTpggAwtXVtcJXq1athBBC7N69W0RHRwsnJycRFhYmvvrqKyGEEIWFhUKj0QiNRlPpscuXL6+0npqUjVut759qWjaSkpLEkCFDhJubm/D29havvvqq0Ov15ff/97//FS1bthRubm6iVatW4uuvv652TCKiuqQQQgjJG1eIiIjIhnGCKBEREZkVywYRERGZFcsGERERmRXLBhEREZkVywYRERGZFcsGERERmRXLBhEREZkVywYRERGZFcsGERERmRXLBhEREZkVywYRERGZFcsGERERmRXLBhEREZkVywYRERGZFcsGERERmRXLBhEREZkVywYRERGZFcsGERERmRXLBhEREZkVywYRERGZFcsGERERmRXLBhEREZkVywYRERGZFcsGERERmRXLBhEREZkVywYRERGZFcsGERERmRXLBhEREZkVywYRERGZFcsGERERmRXLBhEREZkVywYRERGZFcsGERERmRXLBhEREZkVywYRERGZ1f8DwUFYVeOu4c8AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "file_path = 'stock_data.xlsx' # 读取 Excel 文件\n",
    "df = pd.read_excel(file_path, sheet_name='工作表 1 - stock_data')\n",
    "plt.rcParams['font.sans-serif'] = 'SimHei' #设置中文显示\n",
    "df['日期'] = pd.to_datetime(df['日期']) # 将“日期”列转换为日期时间类型\n",
    "df.set_index('日期', inplace=True) # 将“日期”列设置为索引\n",
    "# 折线图：显示收盘价随日期的变化\n",
    "plt.figure(figsize=(10, 6))\n",
    "plt.plot(df.index, df['收盘'])\n",
    "plt.title('收盘价折线图')\n",
    "plt.xlabel('日期')\n",
    "plt.ylabel('收盘价（元）')\n",
    "plt.savefig('line_plot.png')\n",
    "plt.show()\n",
    "plt.close()\n",
    "# 饼图：显示前 5 天的成交量占比\n",
    "sample_data = df['成交量'].head(5)\n",
    "plt.figure(figsize=(10, 6))\n",
    "plt.pie(sample_data, labels=sample_data.index.date, autopct='%1.1f%%')\n",
    "plt.title('前 5 天成交量饼图')\n",
    "plt.savefig('pie_chart.png')\n",
    "plt.show()\n",
    "plt.close()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
